/*
 * @: 存档插件
 * @Version: 1.0
 * @Autor: ziwei
 * @Date: 2022-02-25 17:47:34
 * @LastEditors: ziwei
 * @LastEditTime: 2022-02-25 18:13:46
 */
const Jszip = require('jszip');
const path = require('path');

// class ArchivePlugin{
//   constructor(options){
//     this.options = options
//   }
//   //什么时候能拿到结果
//   apply(compiler){
//     compiler.hooks.emit.tapAsync('ArchivePlugin',(compilation,callback)=>{
//       let jszip = new Jszip();
//       //assets对象 key文件名 值文件内容 它存放着所有将要输出到目录目录里的文件
//       let assets = compilation.assets;
//       for(let filename in assets){
//         const source = assets[filename].source;
//         jszip.file(filename,source)
//       }
//       jszip.generateAsync({type:'nodebuffer'}).then(content=>{
//         let filename = this.options.filename.replace(`[timestamp]`,Date.now()+'')
//         assets[`${filename}`] = {
//           source(){
//             return content;
//           }
//         }
//         callback();
//       })
//     })
//   }
// }

//promise形式
class ArchivePlugin{
  constructor(options){
    this.options = options
  }
  //什么时候能拿到结果
  apply(compiler){
    compiler.hooks.emit.tapPromise('ArchivePlugin',(compilation)=>{
      let jszip = new Jszip();
      //assets对象 key文件名 值文件内容 它存放着所有将要输出到目录目录里的文件
      let assets = compilation.assets;
      for(let filename in assets){
        const source = assets[filename].source;
        jszip.file(filename,source)
      }
      return jszip.generateAsync({type:'nodebuffer'}).then(content=>{
        let filename = this.options.filename.replace(`[timestamp]`,Date.now()+'')
        assets[`${filename}`] = {
          source(){
            return content;
          }
        }
      })
    })
  }
}
module.exports = ArchivePlugin;